# Create your views here.
from django.http import HttpResponse
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.shortcuts import get_object_or_404
from django.contrib.auth.decorators import login_required
from datetime import datetime, timedelta
from forms import *
from models import *
from django.contrib.auth.decorators import *

@login_required
def index(request):
    return render_to_response('index.html', {})

@user_passes_test(lambda u: u.has_perm("User.add"))
def lista_de_usuarios(request):
    lista_de_usuarios = Usuario.objects.all()
    return render_to_response("lista_de_usuarios.html",{'lista_de_usuarios':lista_de_usuarios})

@user_passes_test(lambda u: u.has_perm("User.add"))
def lista_de_clientes(request):
    lista_de_clientes = Cliente.objects.all()
    return render_to_response("lista_de_clientes.html",{'lista_de_clientes':lista_de_clientes})

@login_required
def lista_de_pratos(request):
    lista_de_pratos = Prato.objects.all()
    #print request.user
    return render_to_response("lista_de_pratos.html",{'lista_de_pratos':lista_de_pratos})

@login_required
def lista_de_bebidas(request):
    lista_de_bebidas = Bebida.objects.all()
    return render_to_response("lista_de_bebidas.html",{'lista_de_bebidas':lista_de_bebidas})

@login_required
def lista_de_pedidos(request):
    lista_de_pedidos = Pedido.objects.order_by('-minutos_em_atraso')
    hora_atual = datetime.now()
    for pedido in lista_de_pedidos:
        pedido.minutos_em_atraso = (-1) * ( pedido.limite_de_tempo - (hora_atual.minute - pedido.hora_do_pedido.minute))
        pedido.save()
    return render_to_response("lista_de_pedidos.html",{'lista_de_pedidos':lista_de_pedidos, 'hora_atual':hora_atual})

def lista_de_comandas(request):
    if request.method == 'GET':
        lista_de_pedidos_nao_pagos = Pedido.objects.filter(cliente__exact= request.user).filter(pago = False)
        comanda = Comanda()
        for pedido in lista_de_pedidos_nao_pagos:
            comanda.adicionar_pedido(pedido)
        return render_to_response("lista_de_comandas.html", {'comanda':comanda})
    return render_to_response("lista_de_comandas.html",{})

@login_required
def exibir_cardapio(request):  
    if request.method == 'POST':
        lista_de_quantidades = request.POST.getlist('quantidade')
        lista_de_nomes = request.POST.getlist('nome_do_produto')
        lista_de_codigos = request.POST.getlist('codigo_do_produto')
        lista_de_tempo_de_preparo = request.POST.getlist('limite_de_tempo')
     
        for i in range(0,len(lista_de_quantidades)):
            if int(lista_de_quantidades[i]) > 0:
                #print lista_de_codigos[i], lista_de_nomes[i], 'Quantidade solicitada:', lista_de_quantidades[i]
                
                #Recupera a informacao do produto
                produto = Produto.objects.get(id = lista_de_codigos[i])
                
                #Cria um Pedido
                pedido = Pedido()
                #Preenchimento do pedido de acordo com a quantidade solicitada pelo cliente
                pedido.codigo_do_produto = produto.id
                pedido.nome_do_produto = produto.nome
                pedido.preco = produto.preco
                pedido.quantidade = int(lista_de_quantidades[i])
                pedido.limite_de_tempo = produto.tempo_preparo
                pedido.minutos_em_atraso = 0
                pedido.pago = False
                pedido.cliente = request.user
                
                #Cadastra o pedido no banco
                pedido.save()
                            
                #Decremento no estoque do produto que foi solicitado pelo cliente.
                produto.unidades_disponiveis = produto.unidades_disponiveis - int(lista_de_quantidades[i])
                produto.save()               
                                 
        return render_to_response("salvo.html",{})
    
    else:
        lista_de_formularios = []
        formulario = Form_Cad_Usuario()
        lista_de_bebidas = Bebida.objects.filter(unidades_disponiveis__gt = 0)
        lista_de_pratos = Prato.objects.filter(unidades_disponiveis__gt = 0)        
        for bebida in lista_de_bebidas:
            formulario = Form_Cad_Pedido({'codigo_do_produto':bebida.id,
                                          'nome_do_produto':bebida.nome,
                                          'quantidade':0,
                                          'preco':bebida.preco})                
            lista_de_formularios.append(formulario)
        
        for prato in lista_de_pratos:
            formulario = Form_Cad_Pedido({'codigo_do_produto':prato.id,
                                          'nome_do_produto':prato.nome,
                                          'quantidade':0,
                                          'preco':prato.preco})                
            lista_de_formularios.append(formulario)
                      
    return render_to_response("exibir_cardapio.html",{'lista_de_formularios':lista_de_formularios},context_instance = RequestContext(request))    
@login_required
def cadastrar_usuario(request):
    italo = Pessoa()
    italo.verificar_cpf()
    if request.method == 'POST':
        formulario = Form_Cad_Usuario(request.POST, request.FILES)        
        if formulario.is_valid():
            formulario.save()                        
            return render_to_response("salvo.html",{})
    
    else:
        formulario = Form_Cad_Usuario()
        
    return render_to_response("cadastrar_usuario.html",
                              {'formulario':formulario},
                              context_instance = RequestContext(request))
@login_required    
def editar_usuario(request, id_usuario):
    usuario = get_object_or_404(Usuario, pk = id_usuario)
    if request.method == 'POST':
        formulario = Form_Cad_Usuario(request.POST, instance = usuario)
        if formulario.is_valid():
            formulario.save()
            return render_to_response("salvo.html",{})
    else:
        formulario = Form_Cad_Usuario(instance = usuario)
    
    return render_to_response("editar_usuario.html", {'formulario':formulario}, context_instance = RequestContext(request))
@login_required        
def cadastrar_cliente(request):
    if request.method == 'POST':
        formulario = Form_Cad_Cliente(request.POST, request.FILES)        
        if formulario.is_valid():
            formulario.save()                        
            return render_to_response("salvo.html",{})
    
    else:
        formulario = Form_Cad_Cliente()
        
    return render_to_response("cadastrar_cliente.html",
                              {'formulario':formulario},
                              context_instance = RequestContext(request))
@login_required    
def editar_cliente(request, id_cliente):
    cliente = get_object_or_404(Cliente, pk = id_cliente)
    if request.method == 'POST':
        formulario = Form_Cad_Cliente(request.POST, instance = cliente)
        if formulario.is_valid():
            formulario.save()
            return render_to_response("salvo.html",{})
    else:
        formulario = Form_Cad_Cliente(instance = cliente)
    
    return render_to_response("editar_cliente.html", {'formulario':formulario}, context_instance = RequestContext(request))

@user_passes_test(lambda u: u.has_perm("Prato.add"))
def cadastrar_prato(request):
    if request.method == 'POST':
        formulario = Form_Cad_Prato(request.POST, request.FILES)        
        if formulario.is_valid():
            formulario.save()                        
            return render_to_response("salvo.html",{})
    
    else:
        formulario = Form_Cad_Prato()
        
    return render_to_response("cadastrar_prato.html",
                              {'formulario':formulario},
                              context_instance = RequestContext(request))
@login_required    
def editar_prato(request, id_prato):
    prato = get_object_or_404(Prato, pk = id_prato)
    if request.method == 'POST':
        formulario = Form_Cad_Prato(request.POST, instance = prato)
        if formulario.is_valid():
            formulario.save()
            return render_to_response("salvo.html",{})
    else:
        formulario = Form_Cad_Prato(instance = prato)
    
    return render_to_response("editar_prato.html", {'formulario':formulario}, context_instance = RequestContext(request))

@user_passes_test(lambda u: u.has_perm("Prato.add"))
def cadastrar_bebida(request):
    if request.method == 'POST':
        formulario = Form_Cad_Bebida(request.POST, request.FILES)        
        if formulario.is_valid():
            formulario.save()                        
            return render_to_response("salvo.html",{})
    
    else:
        formulario = Form_Cad_Bebida()
        
    return render_to_response("cadastrar_bebida.html",
                              {'formulario':formulario},
                              context_instance = RequestContext(request))
@login_required    
def editar_bebida(request, id_bebida):
    bebida = get_object_or_404(Bebida, pk = id_bebida)
    if request.method == 'POST':
        formulario = Form_Cad_Bebida(request.POST, instance = bebida)
        if formulario.is_valid():
            formulario.save()
            return render_to_response("salvo.html",{})
    else:
        formulario = Form_Cad_Bebida(instance = bebida)
    
    return render_to_response("editar_bebida.html", {'formulario':formulario}, context_instance = RequestContext(request))
    